return GPOINTER_TO_UINT (k->pointer)
+ (guint)(k->scale*100)
- + (guint)k->filter;
+ + (guint)k->filter * 2 +
+ + (guint)k->pointer_is_child;
}
static gboolean
return k1->pointer == k2->pointer &&
k1->scale == k2->scale &&
- k1->filter == k2->filter;
+ k1->filter == k2->filter &&
+ k1->pointer_is_child == k2->pointer_is_child &&
+ (!k1->pointer_is_child || graphene_rect_equal (&k1->parent_rect, &k2->parent_rect));
}
int
return;
key.pointer = node;
+ key.pointer_is_child = FALSE;
key.scale = scale;
key.filter = GL_NEAREST;
}
key.pointer = node;
+ key.pointer_is_child = FALSE;
key.scale = ops_get_scale (builder);
key.filter = GL_NEAREST;
blurred_region.texture_id = gsk_gl_driver_get_texture_for_key (self->gl_driver, &key);
texture_height = ceilf ((node_outline->bounds.size.height + blur_extra) * scale);
key.pointer = node;
+ key.pointer_is_child = FALSE;
key.scale = scale;
key.filter = GL_NEAREST;
blurred_texture_id = gsk_gl_driver_get_texture_for_key (self->gl_driver, &key);
(flags & FORCE_OFFSCREEN) == 0)
{
GdkTexture *texture = gsk_texture_node_get_texture (child_node);
-
upload_texture (self, texture, texture_region_out);
*is_offscreen = FALSE;
return TRUE;
/* Check if we've already cached the drawn texture. */
key.pointer = child_node;
+ key.pointer_is_child = TRUE; /* Don't conflict with the child using the cache too */
key.scale = ops_get_scale (builder);
key.filter = filter;
cached_id = gsk_gl_driver_get_texture_for_key (self->gl_driver, &key);